using System;
using bitzhuwei.Compiler;

namespace bitzhuwei.GLSLFormat {
    /// <summary>
    /// Correspond to the Vn node type_specifier_nonarray in the grammar(GLSL).
    /// </summary>
    internal partial class Vntype_specifier_nonarray : IFullFormat {
        // [168] type_specifier_nonarray = 'void' ;
        // [169] type_specifier_nonarray = 'float' ;
        // [170] type_specifier_nonarray = 'double' ;
        // [171] type_specifier_nonarray = 'int' ;
        // [172] type_specifier_nonarray = 'uint' ;
        // [173] type_specifier_nonarray = 'bool' ;
        // [174] type_specifier_nonarray = 'vec2' ;
        // [175] type_specifier_nonarray = 'vec3' ;
        // [176] type_specifier_nonarray = 'vec4' ;
        // [177] type_specifier_nonarray = 'dvec2' ;
        // [178] type_specifier_nonarray = 'dvec3' ;
        // [179] type_specifier_nonarray = 'dvec4' ;
        // [180] type_specifier_nonarray = 'bvec2' ;
        // [181] type_specifier_nonarray = 'bvec3' ;
        // [182] type_specifier_nonarray = 'bvec4' ;
        // [183] type_specifier_nonarray = 'ivec2' ;
        // [184] type_specifier_nonarray = 'ivec3' ;
        // [185] type_specifier_nonarray = 'ivec4' ;
        // [186] type_specifier_nonarray = 'uvec2' ;
        // [187] type_specifier_nonarray = 'uvec3' ;
        // [188] type_specifier_nonarray = 'uvec4' ;
        // [189] type_specifier_nonarray = 'mat2' ;
        // [190] type_specifier_nonarray = 'mat3' ;
        // [191] type_specifier_nonarray = 'mat4' ;
        // [192] type_specifier_nonarray = 'mat2x2' ;
        // [193] type_specifier_nonarray = 'mat2x3' ;
        // [194] type_specifier_nonarray = 'mat2x4' ;
        // [195] type_specifier_nonarray = 'mat3x2' ;
        // [196] type_specifier_nonarray = 'mat3x3' ;
        // [197] type_specifier_nonarray = 'mat3x4' ;
        // [198] type_specifier_nonarray = 'mat4x2' ;
        // [199] type_specifier_nonarray = 'mat4x3' ;
        // [200] type_specifier_nonarray = 'mat4x4' ;
        // [201] type_specifier_nonarray = 'dmat2' ;
        // [202] type_specifier_nonarray = 'dmat3' ;
        // [203] type_specifier_nonarray = 'dmat4' ;
        // [204] type_specifier_nonarray = 'dmat2x2' ;
        // [205] type_specifier_nonarray = 'dmat2x3' ;
        // [206] type_specifier_nonarray = 'dmat2x4' ;
        // [207] type_specifier_nonarray = 'dmat3x2' ;
        // [208] type_specifier_nonarray = 'dmat3x3' ;
        // [209] type_specifier_nonarray = 'dmat3x4' ;
        // [210] type_specifier_nonarray = 'dmat4x2' ;
        // [211] type_specifier_nonarray = 'dmat4x3' ;
        // [212] type_specifier_nonarray = 'dmat4x4' ;
        // [213] type_specifier_nonarray = 'atomic_uint' ;
        // [214] type_specifier_nonarray = 'sampler2D' ;
        // [215] type_specifier_nonarray = 'sampler3D' ;
        // [216] type_specifier_nonarray = 'samplerCube' ;
        // [217] type_specifier_nonarray = 'sampler2DShadow' ;
        // [218] type_specifier_nonarray = 'samplerCubeShadow' ;
        // [219] type_specifier_nonarray = 'sampler2DArray' ;
        // [220] type_specifier_nonarray = 'sampler2DArrayShadow' ;
        // [221] type_specifier_nonarray = 'samplerCubeArray' ;
        // [222] type_specifier_nonarray = 'samplerCubeArrayShadow' ;
        // [223] type_specifier_nonarray = 'isampler2D' ;
        // [224] type_specifier_nonarray = 'isampler3D' ;
        // [225] type_specifier_nonarray = 'isamplerCube' ;
        // [226] type_specifier_nonarray = 'isampler2DArray' ;
        // [227] type_specifier_nonarray = 'isamplerCubeArray' ;
        // [228] type_specifier_nonarray = 'usampler2D' ;
        // [229] type_specifier_nonarray = 'usampler3D' ;
        // [230] type_specifier_nonarray = 'usamplerCube' ;
        // [231] type_specifier_nonarray = 'usampler2DArray' ;
        // [232] type_specifier_nonarray = 'usamplerCubeArray' ;
        // [233] type_specifier_nonarray = 'sampler1D' ;
        // [234] type_specifier_nonarray = 'sampler1DShadow' ;
        // [235] type_specifier_nonarray = 'sampler1DArray' ;
        // [236] type_specifier_nonarray = 'sampler1DArrayShadow' ;
        // [237] type_specifier_nonarray = 'isampler1D' ;
        // [238] type_specifier_nonarray = 'isampler1DArray' ;
        // [239] type_specifier_nonarray = 'usampler1D' ;
        // [240] type_specifier_nonarray = 'usampler1DArray' ;
        // [241] type_specifier_nonarray = 'sampler2DRect' ;
        // [242] type_specifier_nonarray = 'sampler2DRectShadow' ;
        // [243] type_specifier_nonarray = 'isampler2DRect' ;
        // [244] type_specifier_nonarray = 'usampler2DRect' ;
        // [245] type_specifier_nonarray = 'samplerBuffer' ;
        // [246] type_specifier_nonarray = 'isamplerBuffer' ;
        // [247] type_specifier_nonarray = 'usamplerBuffer' ;
        // [248] type_specifier_nonarray = 'sampler2DMS' ;
        // [249] type_specifier_nonarray = 'isampler2DMS' ;
        // [250] type_specifier_nonarray = 'usampler2DMS' ;
        // [251] type_specifier_nonarray = 'sampler2DMSArray' ;
        // [252] type_specifier_nonarray = 'isampler2DMSArray' ;
        // [253] type_specifier_nonarray = 'usampler2DMSArray' ;
        // [254] type_specifier_nonarray = 'image2D' ;
        // [255] type_specifier_nonarray = 'iimage2D' ;
        // [256] type_specifier_nonarray = 'uimage2D' ;
        // [257] type_specifier_nonarray = 'image3D' ;
        // [258] type_specifier_nonarray = 'iimage3D' ;
        // [259] type_specifier_nonarray = 'uimage3D' ;
        // [260] type_specifier_nonarray = 'imageCube' ;
        // [261] type_specifier_nonarray = 'iimageCube' ;
        // [262] type_specifier_nonarray = 'uimageCube' ;
        // [263] type_specifier_nonarray = 'imageBuffer' ;
        // [264] type_specifier_nonarray = 'iimageBuffer' ;
        // [265] type_specifier_nonarray = 'uimageBuffer' ;
        // [266] type_specifier_nonarray = 'image1D' ;
        // [267] type_specifier_nonarray = 'iimage1D' ;
        // [268] type_specifier_nonarray = 'uimage1D' ;
        // [269] type_specifier_nonarray = 'image1DArray' ;
        // [270] type_specifier_nonarray = 'iimage1DArray' ;
        // [271] type_specifier_nonarray = 'uimage1DArray' ;
        // [272] type_specifier_nonarray = 'image2DRect' ;
        // [273] type_specifier_nonarray = 'iimage2DRect' ;
        // [274] type_specifier_nonarray = 'uimage2DRect' ;
        // [275] type_specifier_nonarray = 'image2DArray' ;
        // [276] type_specifier_nonarray = 'iimage2DArray' ;
        // [277] type_specifier_nonarray = 'uimage2DArray' ;
        // [278] type_specifier_nonarray = 'imageCubeArray' ;
        // [279] type_specifier_nonarray = 'iimageCubeArray' ;
        // [280] type_specifier_nonarray = 'uimageCubeArray' ;
        // [281] type_specifier_nonarray = 'image2DMS' ;
        // [282] type_specifier_nonarray = 'iimage2DMS' ;
        // [283] type_specifier_nonarray = 'uimage2DMS' ;
        // [284] type_specifier_nonarray = 'image2DMSArray' ;
        // [285] type_specifier_nonarray = 'iimage2DMSArray' ;
        // [286] type_specifier_nonarray = 'uimage2DMSArray' ;
        // [287] type_specifier_nonarray = struct_specifier ;
        // [288] type_specifier_nonarray = 'type_name' ;


        private readonly IFullFormat complex;

        private readonly TokenRange _scope;
        public TokenRange Scope => _scope;
        public void FullFormat(BlankConfig? preConfig, TextWriter writer, FormatContext context) {
            context.PrintBlanksAnd(this.complex, preConfig, writer);
        }


        // [168] type_specifier_nonarray = 'void' ;
        public Vntype_specifier_nonarray(Token r0) {
            this.complex = new complex0(r0);
            this._scope = new TokenRange(r0);
        }
        class complex0 : IFullFormat {
            private readonly TokenRange _scope;
            public TokenRange Scope => _scope;
            public void FullFormat(BlankConfig? preConfig, TextWriter writer, FormatContext context) {
                context.PrintBlanksAnd(r0, preConfig, writer);
            }
            public readonly Token r0;
            public complex0(Token r0) {
                this.r0 = r0;
                this._scope = new TokenRange(r0);
            }
        }

        // [169] type_specifier_nonarray = 'float' ;
        // complex1 repeated with complex0

        // [170] type_specifier_nonarray = 'double' ;
        // complex2 repeated with complex0

        // [171] type_specifier_nonarray = 'int' ;
        // complex3 repeated with complex0

        // [172] type_specifier_nonarray = 'uint' ;
        // complex4 repeated with complex0

        // [173] type_specifier_nonarray = 'bool' ;
        // complex5 repeated with complex0

        // [174] type_specifier_nonarray = 'vec2' ;
        // complex6 repeated with complex0

        // [175] type_specifier_nonarray = 'vec3' ;
        // complex7 repeated with complex0

        // [176] type_specifier_nonarray = 'vec4' ;
        // complex8 repeated with complex0

        // [177] type_specifier_nonarray = 'dvec2' ;
        // complex9 repeated with complex0

        // [178] type_specifier_nonarray = 'dvec3' ;
        // complex10 repeated with complex0

        // [179] type_specifier_nonarray = 'dvec4' ;
        // complex11 repeated with complex0

        // [180] type_specifier_nonarray = 'bvec2' ;
        // complex12 repeated with complex0

        // [181] type_specifier_nonarray = 'bvec3' ;
        // complex13 repeated with complex0

        // [182] type_specifier_nonarray = 'bvec4' ;
        // complex14 repeated with complex0

        // [183] type_specifier_nonarray = 'ivec2' ;
        // complex15 repeated with complex0

        // [184] type_specifier_nonarray = 'ivec3' ;
        // complex16 repeated with complex0

        // [185] type_specifier_nonarray = 'ivec4' ;
        // complex17 repeated with complex0

        // [186] type_specifier_nonarray = 'uvec2' ;
        // complex18 repeated with complex0

        // [187] type_specifier_nonarray = 'uvec3' ;
        // complex19 repeated with complex0

        // [188] type_specifier_nonarray = 'uvec4' ;
        // complex20 repeated with complex0

        // [189] type_specifier_nonarray = 'mat2' ;
        // complex21 repeated with complex0

        // [190] type_specifier_nonarray = 'mat3' ;
        // complex22 repeated with complex0

        // [191] type_specifier_nonarray = 'mat4' ;
        // complex23 repeated with complex0

        // [192] type_specifier_nonarray = 'mat2x2' ;
        // complex24 repeated with complex0

        // [193] type_specifier_nonarray = 'mat2x3' ;
        // complex25 repeated with complex0

        // [194] type_specifier_nonarray = 'mat2x4' ;
        // complex26 repeated with complex0

        // [195] type_specifier_nonarray = 'mat3x2' ;
        // complex27 repeated with complex0

        // [196] type_specifier_nonarray = 'mat3x3' ;
        // complex28 repeated with complex0

        // [197] type_specifier_nonarray = 'mat3x4' ;
        // complex29 repeated with complex0

        // [198] type_specifier_nonarray = 'mat4x2' ;
        // complex30 repeated with complex0

        // [199] type_specifier_nonarray = 'mat4x3' ;
        // complex31 repeated with complex0

        // [200] type_specifier_nonarray = 'mat4x4' ;
        // complex32 repeated with complex0

        // [201] type_specifier_nonarray = 'dmat2' ;
        // complex33 repeated with complex0

        // [202] type_specifier_nonarray = 'dmat3' ;
        // complex34 repeated with complex0

        // [203] type_specifier_nonarray = 'dmat4' ;
        // complex35 repeated with complex0

        // [204] type_specifier_nonarray = 'dmat2x2' ;
        // complex36 repeated with complex0

        // [205] type_specifier_nonarray = 'dmat2x3' ;
        // complex37 repeated with complex0

        // [206] type_specifier_nonarray = 'dmat2x4' ;
        // complex38 repeated with complex0

        // [207] type_specifier_nonarray = 'dmat3x2' ;
        // complex39 repeated with complex0

        // [208] type_specifier_nonarray = 'dmat3x3' ;
        // complex40 repeated with complex0

        // [209] type_specifier_nonarray = 'dmat3x4' ;
        // complex41 repeated with complex0

        // [210] type_specifier_nonarray = 'dmat4x2' ;
        // complex42 repeated with complex0

        // [211] type_specifier_nonarray = 'dmat4x3' ;
        // complex43 repeated with complex0

        // [212] type_specifier_nonarray = 'dmat4x4' ;
        // complex44 repeated with complex0

        // [213] type_specifier_nonarray = 'atomic_uint' ;
        // complex45 repeated with complex0

        // [214] type_specifier_nonarray = 'sampler2D' ;
        // complex46 repeated with complex0

        // [215] type_specifier_nonarray = 'sampler3D' ;
        // complex47 repeated with complex0

        // [216] type_specifier_nonarray = 'samplerCube' ;
        // complex48 repeated with complex0

        // [217] type_specifier_nonarray = 'sampler2DShadow' ;
        // complex49 repeated with complex0

        // [218] type_specifier_nonarray = 'samplerCubeShadow' ;
        // complex50 repeated with complex0

        // [219] type_specifier_nonarray = 'sampler2DArray' ;
        // complex51 repeated with complex0

        // [220] type_specifier_nonarray = 'sampler2DArrayShadow' ;
        // complex52 repeated with complex0

        // [221] type_specifier_nonarray = 'samplerCubeArray' ;
        // complex53 repeated with complex0

        // [222] type_specifier_nonarray = 'samplerCubeArrayShadow' ;
        // complex54 repeated with complex0

        // [223] type_specifier_nonarray = 'isampler2D' ;
        // complex55 repeated with complex0

        // [224] type_specifier_nonarray = 'isampler3D' ;
        // complex56 repeated with complex0

        // [225] type_specifier_nonarray = 'isamplerCube' ;
        // complex57 repeated with complex0

        // [226] type_specifier_nonarray = 'isampler2DArray' ;
        // complex58 repeated with complex0

        // [227] type_specifier_nonarray = 'isamplerCubeArray' ;
        // complex59 repeated with complex0

        // [228] type_specifier_nonarray = 'usampler2D' ;
        // complex60 repeated with complex0

        // [229] type_specifier_nonarray = 'usampler3D' ;
        // complex61 repeated with complex0

        // [230] type_specifier_nonarray = 'usamplerCube' ;
        // complex62 repeated with complex0

        // [231] type_specifier_nonarray = 'usampler2DArray' ;
        // complex63 repeated with complex0

        // [232] type_specifier_nonarray = 'usamplerCubeArray' ;
        // complex64 repeated with complex0

        // [233] type_specifier_nonarray = 'sampler1D' ;
        // complex65 repeated with complex0

        // [234] type_specifier_nonarray = 'sampler1DShadow' ;
        // complex66 repeated with complex0

        // [235] type_specifier_nonarray = 'sampler1DArray' ;
        // complex67 repeated with complex0

        // [236] type_specifier_nonarray = 'sampler1DArrayShadow' ;
        // complex68 repeated with complex0

        // [237] type_specifier_nonarray = 'isampler1D' ;
        // complex69 repeated with complex0

        // [238] type_specifier_nonarray = 'isampler1DArray' ;
        // complex70 repeated with complex0

        // [239] type_specifier_nonarray = 'usampler1D' ;
        // complex71 repeated with complex0

        // [240] type_specifier_nonarray = 'usampler1DArray' ;
        // complex72 repeated with complex0

        // [241] type_specifier_nonarray = 'sampler2DRect' ;
        // complex73 repeated with complex0

        // [242] type_specifier_nonarray = 'sampler2DRectShadow' ;
        // complex74 repeated with complex0

        // [243] type_specifier_nonarray = 'isampler2DRect' ;
        // complex75 repeated with complex0

        // [244] type_specifier_nonarray = 'usampler2DRect' ;
        // complex76 repeated with complex0

        // [245] type_specifier_nonarray = 'samplerBuffer' ;
        // complex77 repeated with complex0

        // [246] type_specifier_nonarray = 'isamplerBuffer' ;
        // complex78 repeated with complex0

        // [247] type_specifier_nonarray = 'usamplerBuffer' ;
        // complex79 repeated with complex0

        // [248] type_specifier_nonarray = 'sampler2DMS' ;
        // complex80 repeated with complex0

        // [249] type_specifier_nonarray = 'isampler2DMS' ;
        // complex81 repeated with complex0

        // [250] type_specifier_nonarray = 'usampler2DMS' ;
        // complex82 repeated with complex0

        // [251] type_specifier_nonarray = 'sampler2DMSArray' ;
        // complex83 repeated with complex0

        // [252] type_specifier_nonarray = 'isampler2DMSArray' ;
        // complex84 repeated with complex0

        // [253] type_specifier_nonarray = 'usampler2DMSArray' ;
        // complex85 repeated with complex0

        // [254] type_specifier_nonarray = 'image2D' ;
        // complex86 repeated with complex0

        // [255] type_specifier_nonarray = 'iimage2D' ;
        // complex87 repeated with complex0

        // [256] type_specifier_nonarray = 'uimage2D' ;
        // complex88 repeated with complex0

        // [257] type_specifier_nonarray = 'image3D' ;
        // complex89 repeated with complex0

        // [258] type_specifier_nonarray = 'iimage3D' ;
        // complex90 repeated with complex0

        // [259] type_specifier_nonarray = 'uimage3D' ;
        // complex91 repeated with complex0

        // [260] type_specifier_nonarray = 'imageCube' ;
        // complex92 repeated with complex0

        // [261] type_specifier_nonarray = 'iimageCube' ;
        // complex93 repeated with complex0

        // [262] type_specifier_nonarray = 'uimageCube' ;
        // complex94 repeated with complex0

        // [263] type_specifier_nonarray = 'imageBuffer' ;
        // complex95 repeated with complex0

        // [264] type_specifier_nonarray = 'iimageBuffer' ;
        // complex96 repeated with complex0

        // [265] type_specifier_nonarray = 'uimageBuffer' ;
        // complex97 repeated with complex0

        // [266] type_specifier_nonarray = 'image1D' ;
        // complex98 repeated with complex0

        // [267] type_specifier_nonarray = 'iimage1D' ;
        // complex99 repeated with complex0

        // [268] type_specifier_nonarray = 'uimage1D' ;
        // complex100 repeated with complex0

        // [269] type_specifier_nonarray = 'image1DArray' ;
        // complex101 repeated with complex0

        // [270] type_specifier_nonarray = 'iimage1DArray' ;
        // complex102 repeated with complex0

        // [271] type_specifier_nonarray = 'uimage1DArray' ;
        // complex103 repeated with complex0

        // [272] type_specifier_nonarray = 'image2DRect' ;
        // complex104 repeated with complex0

        // [273] type_specifier_nonarray = 'iimage2DRect' ;
        // complex105 repeated with complex0

        // [274] type_specifier_nonarray = 'uimage2DRect' ;
        // complex106 repeated with complex0

        // [275] type_specifier_nonarray = 'image2DArray' ;
        // complex107 repeated with complex0

        // [276] type_specifier_nonarray = 'iimage2DArray' ;
        // complex108 repeated with complex0

        // [277] type_specifier_nonarray = 'uimage2DArray' ;
        // complex109 repeated with complex0

        // [278] type_specifier_nonarray = 'imageCubeArray' ;
        // complex110 repeated with complex0

        // [279] type_specifier_nonarray = 'iimageCubeArray' ;
        // complex111 repeated with complex0

        // [280] type_specifier_nonarray = 'uimageCubeArray' ;
        // complex112 repeated with complex0

        // [281] type_specifier_nonarray = 'image2DMS' ;
        // complex113 repeated with complex0

        // [282] type_specifier_nonarray = 'iimage2DMS' ;
        // complex114 repeated with complex0

        // [283] type_specifier_nonarray = 'uimage2DMS' ;
        // complex115 repeated with complex0

        // [284] type_specifier_nonarray = 'image2DMSArray' ;
        // complex116 repeated with complex0

        // [285] type_specifier_nonarray = 'iimage2DMSArray' ;
        // complex117 repeated with complex0

        // [286] type_specifier_nonarray = 'uimage2DMSArray' ;
        // complex118 repeated with complex0

        // [287] type_specifier_nonarray = struct_specifier ;
        public Vntype_specifier_nonarray(Vnstruct_specifier r0) {
            this.complex = new complex119(r0);
            this._scope = new TokenRange(r0);
        }
        class complex119 : IFullFormat {
            private readonly TokenRange _scope;
            public TokenRange Scope => _scope;
            public void FullFormat(BlankConfig? preConfig, TextWriter writer, FormatContext context) {
                context.PrintBlanksAnd(r0, preConfig, writer);
            }
            public readonly Vnstruct_specifier r0;
            public complex119(Vnstruct_specifier r0) {
                this.r0 = r0;
                this._scope = new TokenRange(r0);
            }
        }

        // [288] type_specifier_nonarray = 'type_name' ;
        // complex120 repeated with complex0



    }
}
